package com.pizzaonline.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.pizzaonline.JDBC.DataBase;
import com.pizzaonline.utils.XMLControler;
import java.sql.*;
import org.jdom.*;

/**
 * Servlet implementation class for Servlet: AjoutIngredient
 *
 */
 public class AjoutIngredient extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
   static final long serialVersionUID = 1L;
   
   //ATTRIBUTS
   private String nom;
   private String prix;
   private String quantite;
   private String seuil;
   private String format;
   private String categorie;
   private int qte_int = -1;
   private int seuil_int = -1;
   private float prix_int = -1;
   
    /* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#HttpServlet()
	 */
	public AjoutIngredient() {
		super();
	}   	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}  	
	
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		//Mode UTF-8
		request.setCharacterEncoding("UTF-8");
		
		// Récupération des paramètres
		nom = request.getParameter("nom_ingredient");
		prix = request.getParameter("prix_unitaire");
		quantite = request.getParameter("qte");
		seuil = request.getParameter("seuil");
		format = request.getParameter("format");
		categorie = request.getParameter("categorie");
				
		response.setContentType("text/html");
		//response.setContentType("text/plain");
		
//		ServletContext context = getServletContext();
//		RequestDispatcher rd = context.getRequestDispatcher("/ajoutIngredient.jsp");
//		rd.forward(request, response); 
//		request.getRequestDispatcher("/ajoutIngredient.jsp?mode=reponse").forward(request,response); 
//		response.sendRedirect("ajoutIngredient.jsp");
		
		PrintWriter out = response.getWriter();
		
		//TEST DES VALEURS
		// todo: mise en page à améliorer
		
		//NOM
		if(nom.equals("")) {
			out.println("<b><font color=\"red\">Le champ nom est vide</font></b><br/>");
		}
		
		//PRIX UNITAIRE
		if(prix.equals("")) {
			out.println("<b><font color=\"red\">Le champ prix est vide</font></b><br/>");
		}
		else {
			try {
				prix_int = Float.parseFloat(prix);
			}
			catch(Exception e) {
				out.println("<b><font color=\"red\">Le champ prix doit contenir un numérique</font></b><br/>");
			}
		}
		
		//QUANTITE
		if(quantite.equals("")) {
			out.println("<b><font color=\"red\">Le champ quantité est vide</font></b><br/>");
		}
		else {
			try {
				qte_int = Integer.parseInt(quantite);
			}
			catch(Exception e) {
				out.println("<b><font color=\"red\">Le champ quantité doit contenir un numérique</font></b><br/>");
			}
		}
		
		//SEUIL
		if(seuil.equals("")) {
			out.println("<b><font color=\"red\">Le champ seuil est vide</font></b><br/>");
		}
		else {
			try {
				seuil_int = Integer.parseInt(seuil);
			}
			catch(Exception e) {
				out.println("<b><font color=\"red\">Le champ seuil doit contenir un numérique</font></b><br/>");
			}
		}
		
		//Connexion à la base
		DataBase db = new DataBase();
		
		if(qte_int != -1 && seuil_int !=- 1 && prix_int != -1) {			
			try{
				db.connexionBD();
					
				// ORDRE SQL
				String sql ="";
				String columns1;
				String values1;
				
				if(format.equals("")){
					columns1 = "nom, prix_unitaire, quantite, seuil";
					values1 = "'"+nom+"',"+prix_int+","+qte_int+","+seuil_int;
				}
				else {
					columns1 = "nom, prix_unitaire, quantite, seuil, format";
					values1 = "'"+nom+"',"+prix_int+","+qte_int+","+seuil_int+",'"+format+"'";					
				}
				
				String columns2 = columns1+", depizza, cat_divers";
				String values2 = values1+", false";
				
				boolean res = true;
				
				System.out.println(columns2);
				System.out.println(values2);
				
				// INGREDIENT DE PIZZA
				if(categorie.equals("Pizza")){
					res = db.insert("stock", columns1, values1);
				}
				
				// INGREDIENT DE SALADE
				else if(categorie.equals("Salade")){
					values2 = values2+", 'salade'";
					res = db.insert("stock", columns2, values2);
				}
				
				// INGREDIENT DIVERS
				else if(categorie.equals("Boisson")){
					values2 = values2+", 'boisson'";
					insereBoissonXML(out);//Insertion dans la base
					res = db.insert("stock", columns2, values2);
				}
				
				//Dessert
				else if(categorie.equals("Dessert")){
					values2 = values2+", 'dessert'";
					insereDessertXML(out);
					//Insertion dans la base
					res = db.insert("stock", columns2, values2);
				}
				
				if(res){
					out.println("<b><font color=\"red\">Une erreur s'est produite lors de la requête SQL</font></b><br/>");
					out.println("<a href=\"ajoutIngredient.jsp\">Recommencer</a>");
				}
				else{
					System.out.println("OK");
					db.closeConnection();
					out.println("<b><font color=\"green\">Insertion réussie ! </font></b><br/>");
					out.println("<a href=\"ajoutIngredient.jsp\">Insérer un nouvel ingrédient</a>");
				}
			}
			catch(SQLException e){
				e.printStackTrace();
			}
		}
		return;
	} 
	
	
	/* (non-Javadoc)
	 * @see javax.servlet.GenericServlet#init()
	 */
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		super.init();
	}
	
	//Méthode d'insertion d'une boisson dans le fichier XML
	private void insereBoissonXML(PrintWriter out){
		ServletContext c = this.getServletConfig().getServletContext();
		try{
			// Lecture du fichier XML
			XMLControler.readXMLFile("carte.xml");
			
			Element boissons = XMLControler.racine.getChild("Boissons");
			
			// Création d'un nouvel élément Boisson
			Element newBoisson = new Element("Boisson");
			newBoisson.setAttribute("nomBoisson",nom);
			newBoisson.setAttribute("prix",prix);
			newBoisson.setAttribute("format",format);
			boissons.addContent(newBoisson);
			
			// Sauvegarde du fichier XML
			XMLControler.saveXMLFile("carte.xml");
			out.println("<b><font color=\"green\">Insertion réussie dans le fichier XML</font></b><br/>");
//			out.println("<a href=\"ajoutPizza.xsql\">Ajouter un autre divers </a><br/>");	
		}
		catch(Exception e){
			System.out.println("Erreur de lecture du fichier XML");
			out.println("<b><font color=\"red\">Erreur d'insertion dans le fichier XML</font></b><br/>");
			out.println("<a href=\"ajoutPizza.xsql\">Recommencer</a><br/>");	
			e.printStackTrace();
		}
	}
	
	//Méthode d'insertion d'un dessert dans le fichier XML
	private void insereDessertXML(PrintWriter out){
		ServletContext c = this.getServletConfig().getServletContext();
		try{
			//Lecture du fichier XML
			XMLControler.readXMLFile(c.getRealPath("xml/carte.xml"));
			
			Element desserts = XMLControler.racine.getChild("Desserts");
			
			//Création d'un nouvel élément Boisson
			Element newDessert = new Element("Dessert");
			newDessert.setAttribute("nomDessert",nom);
			newDessert.setAttribute("prix",prix);
			desserts.addContent(newDessert);
			
			//Sauvegarde du fichier XML
			XMLControler.saveXMLFile("carte.xml");
			out.println("<b><font color=\"green\">Insertion réussie dans le fichier XML</font></b><br/>");
//			out.println("<a href=\"ajoutIngredient.jsp\">Ajouter un autre divers </a><br/>");	
		}
		catch(Exception e){
			System.out.println("Erreur de lecture du fichier XML");
			out.println("<b><font color=\"red\">Erreur d'insertion dans le fichier XML</font></b><br/>");
			out.println("<a href=\"ajoutIngredient.jsp\">Recommencer</a><br/>");	
			e.printStackTrace();
		}
	}
	
	// ACCESSEURS
	
	public String getNom(){
		return nom;
	}
	
	public String getPrix(){
		return prix;
	}
	
	public String getQuantite(){
		return quantite;
	}
	
	public String getSeuil(){
		return seuil;
	}
	
	public String getFormat(){
		return format;
	}
	
	public String getCategorie(){
		return categorie;
	}
	
}